package main

import (
	"fmt"
	"goloader"
	"lib"
	_ "lib"
	"unsafe"
)

func main() {
	// 重定向库
	symPtr := make(map[string]uintptr)
	goloader.RegSymbol(symPtr)
	// 加载扩展
	lib.SetPtr(symPtr)
	// 装载库
	r, err := goloader.ReadObjs(
		[]string{"Modules.a"},
		[]string{"Modules"})
	if err != nil {
		fmt.Println("装载失败:\n", err)
		return
	}
	// 加载库
	c, err := goloader.Load(r, symPtr)
	if err != nil {
		fmt.Println("加载错误:\n", err)
		return
	}
	// 得到插件函数地址
	portPtr := c.Syms["%e5%88%9d%e5%a7%8b%e5%8c%96%e5%87%bd%e6%95%b0%e6%b5%8b%e8%af%95/Modules.Init"] // 获得函数地址
	portContainer := (uintptr)(unsafe.Pointer(&portPtr))                                              // 函数地址的地址是指针
	portFunc := *(*func())(unsafe.Pointer(&portContainer))                                            // 地址指针的指针转换为函数指针的指针
	// 测试插件方法
	portFunc() // 调用插件 Init 函数

}
